背景介绍
(Feature fusion)特征融合:VGG网络提出以后,给人们一种印象,深度学习越复杂,参数越多,会有越强的表达能力。但是在深度神经网络的研究过程中,发现到达一定深度后,一味地增加网络的深度并不能带来效果的提升,反而会导致网络收敛变慢。这时需要引入一些其他的方法既能提高网络的表达能力,也不会使网络收敛速度大大降低。两种特征融合方法**(Addition和Concatenate)**随着时代的发展产生了。相信小伙伴们也已经有所了解,在这里我系统的整理一下它们之间的区别。
Addition
Addition,即残差相加,最经典的模型就是ResNet。关于ResNet的有关代码解析可以参考特征提取网络中的一篇博客[ResNet](https://ustccoder.github.io/2020/03/09/feature_extraction ResNet/)
优点:
- 使用残差结构,使得深层网络包含浅层网络的信息,因此反向传播时可以通过不同的分支到达浅层网络。并且梯度中包含常数项,增加了梯度值,解决了梯度消失的问题。
- 增加了网络的泛化能力,和VGG这种串行的网络相比,删除一层可能严重破坏网络结构,而ResNet删除一层,性能不会产生很大的退化。
- 浅层网络代表浅层特征,深层网络代表深层特征,浅层特征可能指代一些纹理信息,深层特征可能指代一些轮廓信息。残差结构将浅层特征与深层特征进行相加,实现特征互补,因此网络的表达能力更强。
Concatenate
Concatenate,即通道合并,最经典的模型就是DenseNet。关于DenseNet的有关代码解析可以参考特征提取网络中的一篇博客[DenseNet](https://ustccoder.github.io/2020/03/16/feature_extraction DenseNet/)
优点:
- 使用通道合并,使得深层网络包含浅层网络的信息,因此反向传播时可以通过不同的分支到达浅层网络,解决了梯度消失的问题。
- 增加了网络的泛化能力,和VGG这种串行的网络相比,删除一层可能严重破坏网络结构,而DenseNet删除一层,性能不会产生很大的退化。
- 浅层网络代表浅层特征,深层网络代表深层特征,浅层特征可能指代一些纹理信息,深层特征可能指代一些轮廓信息。通道合并可以理解为从不同的角度观察特征图,使重要的细节信息从多方位角度保存下来,然后与深层特征结合互补,因此网络的表达能力更强。
Addition与Concatenate的区别
- 最明显的区别是数据维度的变化,Addition操作要求数据维度完全相同,并且*相加后的维度和之前相同,Concatenate操作要求数据可以有一个维度不相同,一般是通道数维度,即batch_size,图像的高和宽都是相同的,并且合并后的通道数是参与合并的数据通道数之和**。
- Addtion是在保持特征维度的情况下,增加了特征的信息量,而Concatenate是通过增加特征维度的情况下,增加了特征的信息量,但是每一维特征的信息量没有变化。
- 因为Addition和Concatenate在数据维度上的差异,当后面加入卷积层时,导致Addition的计算量比Concatenate小得多,更加节省参数和计算量。
- Concatenate将原始特征直接拼接,让网络自己学习如何融合特征,信息不会丢失,而且更加体现出多角度融合的概念,而Addition则将特征进行相加,相当于指定了一种特征融合的方式,因此可以认为Addition是Concatenate的一种特殊形式。
小结
在这个博客中简单直白的讲述了两种特征融合方法的区别,在使用中根据小伙伴们的需要,如果参数量较小,则可以使用多角度Concatenate来增加信息量,并让网络自我学习更新参数。如果参数量较大,则可以使用Addition来增加信息量,给网络指定一个方向,让网络学习更新参数。